// 新购物网页购物车服务 - 处理购物车相关的逻辑

/**
 * 购物车服务
 */
class NewShopCartService {
  /**
   * 初始化购物车
   * @private
   */
  static _initCart() {
    if (!localStorage.getItem('newShopCart')) {
      localStorage.setItem('newShopCart', JSON.stringify([]))
    }
  }

  /**
   * 获取购物车数据
   * @returns {Array} 购物车商品列表
   */
  static getCart() {
    this._initCart()
    return JSON.parse(localStorage.getItem('newShopCart') || '[]')
  }

  /**
   * 将商品添加到购物车
   * @param {Object} product - 商品信息
   * @param {number} quantity - 数量
   * @param {string} color - 颜色
   * @param {string} size - 尺寸
   * @returns {Promise} 添加结果
   */
  static async addToCart(product, quantity = 1, color = '', size = '') {
    // 模拟网络延迟
    await new Promise(resolve => setTimeout(resolve, 300))

    this._initCart()
    const cart = this.getCart()

    // 检查购物车中是否已存在相同的商品
    const existingItemIndex = cart.findIndex(
      item => item.productId === product.id && item.color === color && item.size === size
    )

    if (existingItemIndex >= 0) {
      // 如果已存在，增加数量
      cart[existingItemIndex].quantity += quantity
    } else {
      // 如果不存在，添加新商品
      cart.push({
        productId: product.id,
        productName: product.name,
        price: product.price,
        image: product.image,
        color,
        size,
        quantity
      })
    }

    // 保存购物车数据
    localStorage.setItem('newShopCart', JSON.stringify(cart))
    return { success: true }
  }

  /**
   * 更新购物车中商品的数量
   * @param {number} productId - 商品ID
   * @param {string} color - 颜色
   * @param {string} size - 尺寸
   * @param {number} quantity - 新的数量
   * @returns {Promise} 更新结果
   */
  static async updateQuantity(productId, color, size, quantity) {
    // 模拟网络延迟
    await new Promise(resolve => setTimeout(resolve, 300))

    this._initCart()
    const cart = this.getCart()

    // 查找商品
    const itemIndex = cart.findIndex(
      item => item.productId === productId && item.color === color && item.size === size
    )

    if (itemIndex >= 0) {
      if (quantity <= 0) {
        // 如果数量为0或负数，移除商品
        cart.splice(itemIndex, 1)
      } else {
        // 更新数量
        cart[itemIndex].quantity = quantity
      }

      // 保存购物车数据
      localStorage.setItem('newShopCart', JSON.stringify(cart))
      return { success: true }
    }

    return { success: false, message: '未找到该商品' }
  }

  /**
   * 从购物车中移除商品
   * @param {number} productId - 商品ID
   * @param {string} color - 颜色
   * @param {string} size - 尺寸
   * @returns {Promise} 移除结果
   */
  static async removeFromCart(productId, color, size) {
    // 模拟网络延迟
    await new Promise(resolve => setTimeout(resolve, 300))

    this._initCart()
    const cart = this.getCart()

    // 查找并移除商品
    const newCart = cart.filter(
      item => !(item.productId === productId && item.color === color && item.size === size)
    )

    // 保存购物车数据
    localStorage.setItem('newShopCart', JSON.stringify(newCart))
    return { success: true }
  }

  /**
   * 清空购物车
   * @returns {Promise} 清空结果
   */
  static async clearCart() {
    // 模拟网络延迟
    await new Promise(resolve => setTimeout(resolve, 300))

    localStorage.setItem('newShopCart', JSON.stringify([]))
    return { success: true }
  }

  /**
   * 获取购物车中商品的总数
   * @returns {number} 商品总数
   */
  static getCartItemCount() {
    this._initCart()
    const cart = this.getCart()
    return cart.reduce((total, item) => total + item.quantity, 0)
  }

  /**
   * 获取购物车商品的总价
   * @returns {number} 购物车商品总价
   */
  static getCartTotalPrice() {
    this._initCart()
    const cart = this.getCart()
    return cart.reduce((total, item) => total + (item.price * item.quantity), 0)
  }

  /**
   * 检查商品是否已在购物车中
   * @param {number} productId - 商品ID
   * @param {string} color - 颜色
   * @param {string} size - 尺寸
   * @returns {boolean} 是否已在购物车中
   */
  static isInCart(productId, color, size) {
    this._initCart()
    const cart = this.getCart()
    return cart.some(
      item => item.productId === productId && item.color === color && item.size === size
    )
  }
}

export default NewShopCartService